package com.bkgy.modularbx.slip.entity;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 轧辊数据实体类，用于存储和处理轧辊的各项运行参数。
 * 该类包含轧辊的基本信息（如ID、名称、位置）以及运行时的各项物理参数（如速度、扭矩、张力等）。
 * 主要用于轧机打滑检测和分析系统中的数据采集和处理。
 *
 * @author Trae
 * @version 1.0
 */
@Data
public class RollData {
    /** 轧辊唯一标识符 */
    private String rollId;
    
    /** 轧辊显示名称 */
    private String displayName;
    
    /** 轧辊所属机架区域 */
    private String section;
    
    /** 轧辊在机架中的位置编号 */
    private int position;
    
    /** 轧辊实际运行速度（米/分） */
    private float speedAct;
    
    /** 轧辊设定速度（米/分） */
    private float speedSet;
    // todo 暂时未找到
    /** 机架主传动速度（米/分），用作速度基准 */
    private float masterSpeed;
    
    /** 轧辊实际扭矩（千牛米） */
    private float torqueAct;
    
    /** 轧辊实际张力（千牛） */
    private float tensionAct;
    
    /** 数据采集时间戳 */
    private LocalDateTime timestamp;

    /**
     * 计算轧辊实际速度与设定速度之间的绝对偏差值。
     * 该方法用于监测轧辊运行时的速度异常情况，是打滑检测的重要指标之一。
     *
     * @return 返回速度偏差的绝对值（米/分）
     */
    public float getSpeedDev() {
        return Math.abs(speedAct - speedSet);
    }

    /**
     * 判断当前轧辊数据是否满足打滑分析的条件。
     * 要求至少包含实际速度数据，并且主速度或设定速度中至少有一个可用。
     * 此方法用于数据预处理，确保后续分析的数据有效性。
     *
     * @return 如果数据满足分析条件返回true，否则返回false
     */
    public boolean isValidForSlipAnalysis() {
        return !(Float.isNaN(speedAct) ||
                (Float.isNaN(speedSet) && Float.isNaN(masterSpeed)));
    }
}
